<?php
require_once 'PHPUnit/Framework.php';
require_once "amicitia/conf/Conf.class.php";
require_once 'amicitia/arquitectura/Cargador.class.php';
def("amicitia/persistencia/daos/","ConexionBD");
def("amicitia/persistencia/daos/","FabricaDao");
def("amicitia/modelo/entidades/","Quiniela");
def("amicitia/modelo/entidades/","Juego");
def("amicitia/modelo/entidades/","Pareja");
def("amicitia/modelo/entidades/","Persona");

/**
 * Prueba todo lo concerniente al DaoQuiniela.
 *
 * @author Willy A. Kuster
 */
class PruebaDaoQuiniela extends PHPUnit_Framework_TestCase {

	private $daoQuiniela;

	/**
	 * Realiza la conexión a la base de datos y crea una instancia de
	 * DaoQuiniela.
	 */
	protected function setUp() {
		ConexionBD::getConexionBD()->conectar();
		$fabricaDao = FabricaDao::obtenerFabrica();
		$this->daoQuiniela = $fabricaDao->obtenerDaoQuiniela();
	}

	/**
	 * Prueba la obtención de una quiniela.
	 */
	public function testObtenerQuiniela() {
		$id = 10;
		
		$quinielaEsperada = new Quiniela();
		$quinielaEsperada->setId($id);
		
		$personaEsperada = new Persona();
		$personaEsperada->setId(10);
		$personaEsperada->setAlias("willykc");
		$personaEsperada->setPassword("332caee2c3b1786392e8cf5f046f115edb206078");
		$personaEsperada->setNombre("Willy");
		$personaEsperada->setApellido("Kuster");
		$personaEsperada->setEmail("willykc@gmail.com");
		$personaEsperada->setSexo("m");
		$quinielaEsperada->setApostador($personaEsperada);
		
		$parejaEsperada = new Pareja();
		$parejaEsperada->setId(9);
		
		$dador = new Persona();
		$dador->setId(9);
		$dador->setAlias("darm");
		$dador->setPassword("18807ca8a5865cb16eaf630cf4bf80251391bde2");
		$dador->setNombre("Daniel");
		$dador->setApellido("Rodriguez");
		$dador->setEmail("darmander@gmail.com");
		$dador->setSexo("m");
		$parejaEsperada->setDador($dador);
		
		$receptor = new Persona();
		$receptor->setId(5);
		$receptor->setAlias("jefry");
		$receptor->setPassword("4400d6bc3acc7019e68df948b1dc5c2077966c17");
		$receptor->setNombre("Jeferson");
		$receptor->setApellido("Isaba");
		$receptor->setEmail("jjerconde@hotmail.com");
		$receptor->setSexo("m");
		$parejaEsperada->setReceptor($receptor);
		
		$parejas[9] = $parejaEsperada;
		
		$quinielaEsperada->setPosiblesParejas($parejas);
		
		$quiniela = $this->daoQuiniela->obtenerQuiniela($id);
		$this->assertEquals($quinielaEsperada, $quiniela);
	}
	
	/**
	 * Prueba la obtención de una quiniela en función de una persona y un juego
	 * determinado.
	 */
	public function testObtenerQuinielasDeJuegoYPersona() {
		$id = 10;
		
		$quinielaEsperada = new Quiniela();
		$quinielaEsperada->setId($id);
		
		$personaEsperada = new Persona();
		$personaEsperada->setId(10);
		$personaEsperada->setAlias("willykc");
		$personaEsperada->setPassword("332caee2c3b1786392e8cf5f046f115edb206078");
		$personaEsperada->setNombre("Willy");
		$personaEsperada->setApellido("Kuster");
		$personaEsperada->setEmail("willykc@gmail.com");
		$personaEsperada->setSexo("m");
		
		$juego = new Juego();
		$juego->setId(1);
		
		$quinielaEsperada->setApostador($personaEsperada);
		
		$parejaEsperada = new Pareja();
		$parejaEsperada->setId(9);
		
		$dador = new Persona();
		$dador->setId(9);
		$dador->setAlias("darm");
		$dador->setPassword("18807ca8a5865cb16eaf630cf4bf80251391bde2");
		$dador->setNombre("Daniel");
		$dador->setApellido("Rodriguez");
		$dador->setEmail("darmander@gmail.com");
		$dador->setSexo("m");
		$parejaEsperada->setDador($dador);
		
		$receptor = new Persona();
		$receptor->setId(5);
		$receptor->setAlias("jefry");
		$receptor->setPassword("4400d6bc3acc7019e68df948b1dc5c2077966c17");
		$receptor->setNombre("Jeferson");
		$receptor->setApellido("Isaba");
		$receptor->setEmail("jjerconde@hotmail.com");
		$receptor->setSexo("m");
		$parejaEsperada->setReceptor($receptor);
		
		$parejas[9] = $parejaEsperada;
		
		$quinielaEsperada->setPosiblesParejas($parejas);
		
		$quiniela = $this->daoQuiniela->obtenerQuinielaDeJuegoYPersona($juego,$personaEsperada);
		$this->assertEquals($quinielaEsperada, $quiniela);
	}
	
	/**
	 * Prueba el caso en el que se pase un id que no tiene un registro asociado
	 * en la base de datos.
	 */
	public function testObtenerQuinielaNoExistente() {
		$quiniela = $this->daoQuiniela->obtenerQuiniela(0);
		$this->assertEquals(NULL, $quiniela);
	}
	
	/**
	 * Prueba el guardado de una quiniela en la base de datos.
	 */
	public function testGuardarQuiniela() {
		$quiniela = new Quiniela();
		
		$persona = new Persona();
		$persona->setId(10);
		$persona->setAlias("willykc");
		$persona->setPassword("332caee2c3b1786392e8cf5f046f115edb206078");
		$persona->setNombre("Willy");
		$persona->setApellido("Kuster");
		$persona->setEmail("willykc@gmail.com");
		$persona->setSexo("m");
		$quiniela->setApostador($persona);
		
		$pareja = new Pareja();
		$pareja->setId(8);
		
		$dador = new Persona();
		$dador->setId(8);
		$dador->setAlias("mela");
		$dador->setPassword("19eddb45b28bb407d6e904c2a3d75e48c67ef092");
		$dador->setNombre("Melania");
		$dador->setApellido("La Spina");
		$dador->setEmail("melys4@hotmail.com");
		$dador->setSexo("f");
		
		$pareja->setDador($dador);
		$pareja->setReceptor($persona);
		
		$parejas[8] = $pareja;
		
		$quiniela->setPosiblesParejas($parejas);
		
		$juego = new Juego();
		$juego->setId(2);
		
		$id = $this->daoQuiniela->guardarQuiniela($quiniela,$juego);
		
		$quinielaGuardado = $this->daoQuiniela->obtenerQuiniela($id);
		
		$quiniela->setId($id);
		
		$this->assertEquals($quiniela, $quinielaGuardado);
	}
	
	/**
	 * Prueba el borrado de una quiniela en la base de datos.
	 */
	public function testEliminarQuiniela() {
		$quiniela = new Quiniela();
		
		$persona = new Persona();
		$persona->setId(10);
		$quiniela->setApostador($persona);
		
		$pareja = new Pareja();
		$pareja->setId(9);
		
		$dador = new Persona();
		$dador->setId(9);
		$dador->setAlias("darm");
		$dador->setPassword("18807ca8a5865cb16eaf630cf4bf80251391bde2");
		$dador->setNombre("Daniel");
		$dador->setApellido("Rodriguez");
		$dador->setEmail("darmander@gmail.com");
		$dador->setSexo("m");
		$pareja->setDador($dador);
		
		$receptor = new Persona();
		$receptor->setId(5);
		$receptor->setAlias("jefry");
		$receptor->setPassword("4400d6bc3acc7019e68df948b1dc5c2077966c17");
		$receptor->setNombre("Jeferson");
		$receptor->setApellido("Isaba");
		$receptor->setEmail("jjerconde@hotmail.com");
		$receptor->setSexo("m");
		$pareja->setReceptor($receptor);
		
		$parejas[9] = $pareja;
		
		$quiniela->setPosiblesParejas($parejas);
		
		$juego = new Juego();
		$juego->setId(2);
		
		$id = $this->daoQuiniela->guardarQuiniela($quiniela,$juego);
		
		$exito = $this->daoQuiniela->eliminarQuiniela($id);
		
		$quiniela = $this->daoQuiniela->obtenerQuiniela($id);
		
		$this->assertTrue($exito);
		$this->assertEquals(NULL, $deseo);
	}
	
	/**
	 * Deshace todos los cambios y cierra la conexión a la base de datos.
	 */
	protected function tearDown() {
		ConexionBD::getConexionBD()->deshacer();
		ConexionBD::getConexionBD()->desconectar();
	}
	
}
?>